// 访问器属性 setter 和 getter方法在类中的声明 即 get 和 set 声明
// get 和 set  声明的是访问器属性不是方法，调用访问器属性时，和调用其他属性一样
class Luo {
  constructor(private _name: string) {}
  get name() {
    return this._name + "jia jia"
  }
  set name(name: string) {
    name = name.split(" ")[0]
    this._name = name
  }
}
const l = new Luo("luo")
l.name = "xue yushuai"
console.log(l.name)

//sigle 单例模式
// static 声明的是挂在类上的属性和方法，不是挂在原型链上，只能通过类型调用
class Demo {
  // 将构造声明为private私有方法，则不能通过new 来生成实例
  private static instance: Demo
  private constructor(private _name: string) {}

  static getInstance() {
    if (!this.instance) {
      this.instance = new Demo("deel")
    }
    return this.instance
  }
  set name(name: string) {
    this._name = name
  }
  get name() {
    return this._name
  }
}
const demo1 = Demo.getInstance()
const demo2 = Demo.getInstance()
demo1.name = "lee"
console.log(demo1.name)
console.log(demo2.name)
